package cn.memset.code.lambda;

public class ThisScopeExample {
    public static void main(String[] args) {
        ThisScopeExample example = new ThisScopeExample();

        // 输出 "I am Anonymous Class."
        // 输出 "I am ThisScopeExample Class."
        example.runWithAnonymousClass();
        example.runWithLambda();
    }

    public void runWithAnonymousClass() {
        // 以匿名类的方式运行
        run(new Runnable() {
            @Override
            public void run() {
                // this 是实现了接口 Runnable 的匿名内部类的实例
                System.out.println(this);
            }

            @Override
            public String toString() {
                return "I am Anonymous Class.";
            }
        });
    }

    public void runWithLambda() {
        // 以lambda表达式的方式运行
        run(() -> {
            // this 是类 ThisScopeExample 的实例
            System.out.println(this);
        });
    }

    public void run(Runnable runnable) {
        runnable.run();
    }

    @Override
    public String toString() {
        return "I am ThisScopeExample Class.";
    }
}
